program zadacha_3_5;
var
a,b,c,d,r,s,t,p,q,ro,fi,x1,x2,x3,u,v,h,g:real;
begin
// Ввод коэффициентов кубического уравнения.
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
write('d = '); readln(d);
// Расчёт коэффициентов канонического уравнения по 3.2.
r:=b/a; s:=c/a; t:=d/a;
// Вычисление коэффициентов приведённого уравнения 3.3.
p:=(3*s-r*r)/3;
q:=2*r*r*r/27-r*s/3+t;
// Вычисление дискриминанта кубического уравнения.
d:=(p/3)*sqr(p/3)+sqr(q/2);
// Проверка знака дискриминанта,
// ветка then реализует формулы (3.5),
// ветка else — формулы 3.4
if d<0 then
begin
	ro:=sqrt(-p*p*p/27);
// Следующие два оператора реализуют расчёт угла fi,
// сначала вычисляется величина косинуса угла,
// затем вычисляется его арккосинус через арктангенс.
	fi:=-q/(2*ro);
	fi:=pi/2-arctan(fi/sqrt(1-fi*fi));
// Вычисление действительных корней уравнения x1, x2 и x3
	x1:=2*exp(1/3*ln(ro))*cos(fi/3)-r/3;
	x2:=2*exp(1/3*ln(ro))*cos(fi/3+2*pi/3)-r/3;
	x3:=2*exp(1/3*ln(ro))*cos(fi/3+4*pi/3)-r/3;
end
else
begin
// Вычисление u и v с проверкой знака
// подкоренного выражения.
if -q/2+sqrt(d)>0 then
	u:=exp(1/3*ln(-q/2+sqrt(d)))
else
	if -q/2+sqrt(d)<0 then
	u:=-exp(1/3*ln(abs(-q/2+sqrt(d))))
else
	u:=0;
	if -q/2-sqrt(d)>0 then
	v:=exp(1/3*ln(-q/2-sqrt(d)))
else
	if -q/2-sqrt(d)<0 then
	v:=-exp(1/3*ln(abs(-q/2-sqrt(d))))
else
	v:=0;
// Вычисление действительного корня кубического уравнения.
	x1:=u+v-r/3;
// Вычисление действительной и
// мнимой части комплексных корней.
	h:=-(u+v)/2-r/3;
	g:=(u-v)/2*sqrt(3);
	writeln('[ x1 = ',x1:1:3,' ]  [ x2 = ',h:1:3, ' + i ∗ ',g:1:3,' ]  [ x3 = ',h:1:3,' − i ∗ ',g:1:3,' ]');
end
end.
